/*
加载图片
我们可以将图片的加载写成一个Promise，一旦加载完成，Promise的状态就发生变化。
*/
const preloadImage = function(path) {
	return new Promise(function(resolve, reject) {
		const image = new Image();
		image.onload = resolve;
		image.onerror = reject;
		image.src = path;
		/*
		亏我之前还这样写，妈的
		image.onload = function(e){
			resolve(e)
		};
		*/
	});
};




/*
使用 Generator 函数管理流程， 遇到异步操作的时候， 通常返回一个Promise对象。
下面代码的 Generator 函数g之中， 有一个异步操作getFoo， 它返回的就是一个Promise对象。 
函数run用来处理这个Promise对象， 并调用下一个next方法。
*/
function getFoo() {
	return new Promise(function(resolve, reject) {
		resolve('foo');
	});
}

const g = function*() {
	try {
		const foo = yield getFoo();
		console.log(foo);
	} catch (e) {
		console.log(e);
	}
};

function run(generator) {
	const it = generator();

	function go(result) {
		if (result.done) return result.value;

		return result.value.then(function(value) {
			return go(it.next(value));
		}, function(error) {
			return go(it.throw(error));
		});
	}

	go(it.next());
}

run(g);
